<?php

namespace app\home\controller;


// 引入我们的公共的控制器
use app\common\Controller\Home;

// 继承我们的公共控制器 
class Index extends Home
{
    // index控制器（也就是以下全部）方法都不需要登录就可以进入（区别于business下的方法全部都要登录）
    public $NoLogin = ['*'];
    
    public function __construct()
    {
        
        
        // 继承父类的构造函数
        parent::__construct();
        
        //加载模型
        $this->BusinessModel = model('Business.Business'); 
        $this->SubjectModel = model('Subject.Subject');
        /* 加载TeachetModel。为下面对数据库里面的fa_subject_teacher的name字段和job字段做模糊查询做准备。换句话说，想在那个数据库操作，
        必须先得拿到这个数据库*/
        $this->TeacherModel = model('Teacher.Teacher');
        $this->CategoryModel = model('Subject.Category');
    }
    // 首页
    public function index()
    {
        // 查询数据，然后在下面 $this->assign(['top' => $top,])传过去前端application/home/view/index/index.html
        /*group（）是thinkphp方法（p206）,分组查询。按照括号里面的字段来分组查询，相同的就不查询,所以用'cateid'。
        order()里面'desc'为降序；limit(6)表示查询6条，不用全部查询*/
       $top = $this->SubjectModel->group('cateid')->order('id','desc')->limit(6)->select();
        /* var_dump(collection($top)->toArray());  /*collection($top)：将 $top 变量的数据转换为 Laravel 集合;
        ->toArray()：将得到的集合转换为数组。*/
       
        // 查询新品课程。按时间来排序，10个课程
        $subject = $this->SubjectModel->order('id','desc')->limit(10)->select();
        
        /* 本语句用于查询id=1的收到的那些id的点赞，不是统计的点赞总数。如果想要获取点赞总数，还得再增加一个语句：用一个方法对字符串进行
        统计所以没必要。直接用下面的获取器方法更好*/
        

        /* 获取器，相当于给当前模型增加一个字段，但是这个字段根本不存在，是虚拟字段。虚拟字段的值由自己写逻辑来控制。
        application/common/model/subject.php模型中，有个追加属性，实际上是追加虚拟字段。*/

        // 查询老师数据，
        $teacher = $this->TeacherModel->limit(10)->select();
        // echo "<pre>";
        // var_dump(collection($teacher)->toArray());
        // exit;

        // 赋值。上面查询完数据后，这里数据传送到前台。因为查询到好多条数据，所以用一个数组来赋值
        //  $this->assign(['top' => $top,])传过去前端application/home/view/index/index.html
        $this->assign([
            'top' => $top,
            'subject' => $subject,
            'teacher' => $teacher,
        ]);

        // var_dump(collection($subject) ->toArray()); //select查询多条，转化为数组输出时，变量需要拿collection()先包起来
        // exit;

        return $this -> view ->fetch();
    }
   
  

    // 注册
    public function register()
    {
       // index的内容暂时放到这里-------------------------------------------

        //  $username = 'hello world';
        // $list = [
        //     ['nickname'=>'张三','age'=>23,'sex'=>'男'],
        //     ['nickname'=>'张三','age'=>23,'sex'=>'男'],
        //     ['nickname'=>'张三','age'=>23,'sex'=>'男'],
        //     ['nickname'=>'张三','age'=>23,'sex'=>'男'],
        // ];


        // //将模板传递到视图
        // // this->view->assign()
        // $this->assign('username',$username);
        // $this->assign('list',$list);

        // // 给当前的控制器指向一个模板视图（页面）
        // return $this->view->fetch();
        
       //-------------------------------------------------------------------------- 
  
        // 判断是否有过来post请求
       if($this->request->isPost())
        {
            // 接收param数据，'表单名字'，''(没有数据给个默认值，空)，'trim方法，自己过滤'
            $mobile = $this->request->param('mobile','','trim');
            $password = $this->request->param('password','','trim');

            if(empty($password))
            {
                $this->error('密码不能为空');  
                exit;
            }
            
            // 生成密码盐
            $salt = randstr(10);
            
            // 加密密码
            $repass = md5($password.$salt);

            // 查询注册的来源渠道
            // 加载模型 会自动的去 application/common/Business/Source
            $sourceid = model('Business.Source')->where(['name' =>['LIKE',"%张三%"]])->value('id');
             
            // 打印sql语句
            // $sql = model('Business.Source')->where(['name' =>['LIKE',"%张三%"]])->getLastSql();
            
            // 组装数据
            $data = [
                'mobile' => $mobile,
                'nickname' => build_encrypt($mobile,3,4), //脱敏显示
                'salt' => $salt,
                'password' =>$repass,
                'sourceid' =>$sourceid,
                'genter' =>'0',
                'dael' => '0',
                'money' => '0',
                'auth' => '0',
            ];

            
        // 插入数据
        // validate() 验证器 成功返回插入的条数 失败返回false
        $result = $this->BusinessModel->validate('common/Business/Business')->save($data);

        if($result === FALSE)
         {
            // 插入失败 让模型来返回错误信息
            $this->error($this->BusinessModel->getError());
            exit;
         }else
         {
            $this->success('注册成功，请登录',url('home/index/login'));
         }
            
        }  
        
        // 访问地址：www.fast.com/index.php/home/index/register
        // view/index/register.html 视图文件
        return $this->view->fetch();
    }
     
    // 登录
    public function login()
     {


        //  判断是否有post请求
        if($this->request->isPost())
        {
            // 接收数据
            $mobile = $this->request->param('mobile','','trim');
            $password = $this->request->param('password','','trim');

            // 查询用户是否存在  这时需要绝对性等于  不能模糊性等于
            $business = $this->BusinessModel->where(['mobile'=>$mobile])->find();

            if(empty($business))
            {
                $this->error('用户不存在');
                exit;
            }


             //将获取的模型数据转化为一维数组 var_dump($business->toArray());    
            //    var_dump($business->toArray());


            //  //打印信息
            //  var_dump($business->toArray());
            //  exit;

            // 验证密码是否正确
             $salt = $business['salt'];
             $repass = md5($password.$salt);

            //  var_dump($business['password']);
            //  var_dump($repass);
            //  exit;

             if($repass != $business['password'])
             {
                $this->error('密码错误');
                exit;
             }


            //  使用cookie存入手机号码和ID
             cookie('mobile',$business['mobile']);
             cookie('busid',$business['id']);

             $this->success('登录成功',url('home/business/index'));

        }

        // 访问地址：www.fast.com/index.php/home/index/register
        // view/index/register.
        return $this->view->fetch();
    }

    
    // 退出
    public function logout()
    {
        // 判断是否有ajax请求
        if($this->request->isAjax())
        {
            // 删除掉cookie信息
            cookie('busid',NULL);
            cookie('mobile',NULL);
          
            /*会根据语境自动转换，如果换成ajax将不再有跳转功能，而是返回json结果,
          所以这里success和下面else里面的error将不再有跳转功能*/
            $this->success('退出成功');
            exit;
        }else{

            $this->error('退出失败');
            exit;
        }
    }
    
    
}
